#include <cstdlib>
#include "lista.h"
#include "stdio.h"
#include "assert.h"

/**
 * Agrega un elemento a la lista ordenandolo 
 * de acuerdo a la coordenada x del elemento
 */
void agregar_item_ordenado(Lista* laLista, SDL_Surface* surfacePers, SDL_Surface* surfaceGen, Uint32 x, Uint32 y, Uint32 ID)
{
	//Inicializo el nodo
	Nodo* unNodo = (Nodo*) malloc(sizeof(struct Nodo));
	inicializar_nodo(unNodo, surfacePers, surfaceGen, x, y, ID);

	//Si la lista esta vacia lo agrego primero
	if(laLista->primero == NULL) {
		laLista->primero = unNodo;
	}
	//sino lo agrego donde corresponda dentro de la lista
	else {

		Iterador* iterador = constructor_iterador(laLista);
		bool agregado = false;
		
		while(hay_proximo(iterador) && !agregado) {
			Nodo* nodoActual = item(iterador);
			if(nodoActual->coord_x > x) {
				if(nodoActual->prev == NULL) {
					nodoActual->prev = unNodo;
					unNodo->prox = nodoActual;
					laLista->primero = unNodo;
				}
				else {
					Nodo* nodoAnterior = nodoActual->prev;
					nodoAnterior->prox = unNodo;
					nodoActual->prev = unNodo;
					unNodo->prev = nodoAnterior;
					unNodo->prox = nodoActual;
				}
				agregado = true;
			}
			else if(nodoActual->prox == NULL) {
				nodoActual->prox = unNodo;
				unNodo->prev = nodoActual;				
				agregado = true;
			}
			else {
				proximo(iterador);
			}
		}
		liberar_iterador(iterador);
	}
}
